package io;

import java.io.BufferedOutputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
/**缓冲流写出时的缓冲区问题*/
public class FlushDemo {
    public static void main(String[] args) throws IOException {
        /*
        通过缓冲流写出的数据会被存入缓冲流内部的字节数组中
        直到数组存满数据时才会真实的写出一次

       通过缓冲输出流的fulsh()方法会强制将缓冲流中已经缓冲的数据一次性写出
       fiush()方法在接口Flushable中定义的
       而字节流的超类OutPutStream实现了该接口,这意味着所有字节输出流都具有该方法
       但只有缓冲流真正实现了flush()应有的功能
       其他高级流flush()方法都是调用其连接的flush(),将该动作传递下去
         */
        FileOutputStream fos = new FileOutputStream("bos.txt");
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        String line = "为何用到尽了至知哪样紧要";
        bos.write(line.getBytes(StandardCharsets.UTF_8));
        System.out.println("写出完毕!");
        bos.flush();//flush:冲水
        bos.close();//缓冲流close()时会自动调用一次flush()确保所有数据关闭前写出
    }
}
